package cn.lysoy.demo.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Slf4j
public class FileUtil {

    public static void updateFilePower(String destPath) {
        File file = new File(destPath);
        //设置文件权限
        Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
        perms.add(PosixFilePermission.OWNER_READ);//设置所有者的读取权限
        perms.add(PosixFilePermission.OWNER_WRITE);//设置所有者的写权限
        perms.add(PosixFilePermission.OWNER_EXECUTE);//设置所有者的执行权限
        perms.add(PosixFilePermission.GROUP_READ);//设置组的读取权限
        perms.add(PosixFilePermission.GROUP_EXECUTE);//设置组的执行权限
        perms.add(PosixFilePermission.GROUP_WRITE);
        perms.add(PosixFilePermission.OTHERS_READ);//设置其他的读取权限
        perms.add(PosixFilePermission.OTHERS_EXECUTE);//设置其他的执行权限
        perms.add(PosixFilePermission.OTHERS_WRITE);
        try {
            //设置文件和文件夹的权限
            Path pathParent = Paths.get(file.getParentFile().getAbsolutePath());
            Path pathDest = Paths.get(file.getAbsolutePath());
            Files.setPosixFilePermissions(pathParent, perms);//修改文件夹路径的权限
            Files.setPosixFilePermissions(pathDest, perms);//修改图片文件的权限
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void writeStrToFile(String filePath, String fileName, String str) {
        File path = new File(filePath);
        File f = new File(filePath + "/" + fileName);//新建一个文件对象，如果不存在则创建一个该文件
        try {
            if (!path.exists()) {
                path.mkdirs();
            }
            if(!f.exists()){
                f.createNewFile();
            }
            FileWriter fw;
            fw=new FileWriter(f);
            fw.write(str);//将字符串写入到指定的路径下的文件中
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 写入临时文件
    public static File writeNewTempTxt(List<String> data, String fileName) {
        try {
            File dirFile = File.createTempFile(fileName, ".txt");
            dirFile.deleteOnExit();
            BufferedWriter writer = new BufferedWriter(new FileWriter(dirFile));
            // 写入文件
            for (String str: data) {
                writer.write(str);
                writer.newLine();
            }
            writer.flush();//清空缓冲区数据
            writer.close();//关闭读写流
            return dirFile;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /*
     * Java文件操作 获取不带扩展名的文件名
     *
     *  Created on: 2011-8-2
     *      Author: blueeagle
     */
    public static String getFileNameNoEx(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot >-1) && (dot < (filename.length()))) {
                return filename.substring(0, dot);
            }
        }
        return filename;
    }
}
